package reflection;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @Description: null
 * @Project: testDemo
 * @Author: hjibo
 * @CreateDate: 2019/2/2 11:25
 * @ModificationHistory: （who whatTime doWhat）
 */
@SuppressWarnings("unchecked")
public class Main {

    public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchFieldException {

        try {

            // 1、通过类的全限定名来获取类对象，会抛出异常（常用的方法）
            Class c = Class.forName("reflection.Monkey");
            System.out.println(c.getName());

            Monkey monkey = (Monkey) c.newInstance();
            monkey.setName("孙行者");

            // 获取指定方法名的公有方法对象，如果当前方法没有参数则参数类型设置为null或者不填，如果参数类型不一致会抛出异常
            Method say = c.getMethod("say");

            // 获取方法的参数类型
            Class[] agrs = say.getParameterTypes();

            say.invoke(monkey,agrs);


        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
